package org.yn.subject.application.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.yn.subject.domain.dto.SubjectLabelDTO;
import org.yn.subject.domain.entity.SubjectLabelBO;
import org.yn.subject.domain.request.SaveSubjectInfoRequest;
import org.yn.subject.domain.service.SubjectInfoDomainService;
import org.yn.subject.infra.basic.entity.SubjectLabel;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;

/**
 * 题目表(subjectInfo)表控制层
 *
 * @author makejava
 * @since 2024-03-12 17:43:48
 */
@RestController
@RequestMapping("subjectInfo")
public class SubjectInfoController extends ApiController {

  /**
   * 服务对象
   */
  @Resource
  private SubjectInfoDomainService subjectInfoDomainService;

  /**
   * 分页查询所有数据
   *
   * @param page         分页对象
   * @param subjectLabel 查询实体
   * @return 所有数据
   */
  @GetMapping("page")
  public R selectAll(Page<SubjectLabel> page, SubjectLabel subjectLabel) {
    return R.ok(this.subjectInfoDomainService.page(page, new QueryWrapper<>(subjectLabel)));
  }

  /**
   * 通过主键查询单条数据
   *
   * @param id 主键
   * @return 单条数据
   */
  @GetMapping("{id}")
  public R selectOne(@PathVariable Serializable id) {
    return R.ok(this.subjectInfoDomainService.getById(id));
  }

  /**
   * 新增数据
   *
   * @param request 实体对象
   * @return 新增结果
   */
  @PostMapping("insert")
  public R insert(@RequestBody SaveSubjectInfoRequest request) {
    return R.ok(this.subjectInfoDomainService.save(request));
  }

  /**
   * 修改数据
   *
   * @param subjectLabelBO 实体对象
   * @return 修改结果
   */
  @PutMapping("update")
  public R update(@RequestBody SubjectLabelBO subjectLabelBO) {
    return R.ok(this.subjectInfoDomainService.updateById(subjectLabelBO));
  }

  /**
   * 删除数据
   *
   * @param idList 主键结合
   * @return 删除结果
   */
  @DeleteMapping
  public R delete(@RequestParam("idList") List<Long> idList) {
    return R.ok(this.subjectInfoDomainService.removeByIds(idList));
  }

  @GetMapping("/category")
  public R<List<SubjectLabelDTO>> queryLabelByCategoryId(@RequestParam("categoryId") Long categoryId) {

    List<SubjectLabelDTO> subjectLabelDTOList= subjectInfoDomainService.queryLabelByCategoryId(categoryId);
    return R.ok(subjectLabelDTOList);
  }

}

